package com.mswyt.utils.msCrudbean.dto;

import lombok.Data;

import java.io.Serializable;
import java.util.Map;

/**
 * 该dto是crud请求统一的入参格式，可以根据每个参数的描述进行不同的配置即可。
 *
 * @author mashuai
 */

@Data
public class MsCrudDto implements Serializable {
    /**
     * 配置在实体类上@MsCrudBean注解的targetParam值，如果值重复会进行覆盖操作，启动类上加上@MsScan注解，就不会出现重复的情况
     **/
    private String targetParam;

    /**
     * 该值根据实体操作类型来决定（键名前有*标识必填）
     * 1.删除：*data:{“*list”:[表主键id构建成的集合，如果有特殊，请重写默认的删除方法]}
     * 2.保存：*data:{实体类对象数据}，默认规则，如果id值不为空就是更新，否则就是插入
     * 3.查询：data{查询的字段名称@查询条件:"值"}，查询条件常见的包含了MybatisPlus的条件构造器条件比如name模糊 name@like:"ms"
     * 4.获取字典下拉框：data{查询的字段名称@查询条件:"值"}，查询条件常见的包含了MybatisPlus的条件构造器条件比如name模糊 name@like:"ms"
     **/
    private Map<String, Object> data;


    /**
     * 该值根据实体操作类型来决定
     * 1.删除：
     * config：{
     * "throw":"默认true,如果删除值被其他表引用了，提示的异常信息，值为false时候，会把没有被引用的数据进行删除，返回被引用数据的详情信息与 MsDelCheckDto ",
     * "check":"默认true",根据实体类配置的，进行数据引用校验，值为false时候，直接删除集合内所有的数据。
     * }
     * 2.保存
     * config：{
     * "bizId":"默认id,需要操作表的主键字段名称，也可以自定义"
     * "noAdd":'默认true，如果为false，不管如何，你data里面数据，只会当作插入操作',
     * "check":"默认true",根据实体类配置的，进行数据引用校验，值为false时候，不进行任何校验。直接保存操作。
     * "throw":默认为true，如果为false，直接把错误的结果集返回 MsSaveCheckDto 给你，自己处理业务即可
     * }
     * 3.查询
     * 如果是分页查询curPage，pageSize必填，
     * config：{
     * "curPage":1,
     * "pageSize":10,
     * "handle":"默认true，会根据实体类的注解，自动进行数据处理"
     * }
     **/
    private Map<String, Object> config;

    /**
     * 如果curd方法不满足需求，在@MsCrudBean配置serviceClazz，所对应的service层，任意方法上加上该注解即可
     * 统一用 public Object method(Map<String, Object> params){}
     **/
    private String rewriteMethod;
}
